#include <iostream>
#include <fstream>
#include <string>
#include <unordered_map>
#include "Log.hpp"

extern Log logger;

//翻译文本名和分割符
const std::string dictname="./dict.txt";
const std::string sep=":";          //分割符


//切割字符串
static bool Split(std::string& s,std::string* part1,std::string* part2)   
{
    auto pos=s.find(sep);           //找冒号
    if(pos==std::string::npos)  return false;       //若查到到结尾也没有冒号则终止
    *part1=s.substr(0,pos);         //截取冒号前部分    例如 apple:苹果
    *part2=s.substr(pos+1);         //截取冒号后至结尾
    return true;
}


class Init
{
public:
    Init()
    {
        std::ifstream in(dictname);         //要执行的文件
        if(!in.is_open())
        {
            logger(Fatal,"iftream open %s error",dictname.c_str());
            exit(1);
        }
        std::string line;
        while(std::getline(in,line))        //从文件中读取一行数据放到line中
        {
            std::string part1,part2;
            if(Split(line,&part1,&part2))      //从line中分割两段字符
            dict.insert({part1,part2});       //插入哈希容器
        }
        in.close();
    }

    //查找客户传来的单词
    std::string translation(const std::string& key)
    {
        auto iter=dict.find(key);
        if(iter==dict.end())    return "unknown";
        else    return iter->second;            //若字典中存在客户要查询的单词则返回中文版
    }   
private:
    std::unordered_map<std::string,std::string> dict;       //翻译字典
};